import java.awt.Color;
import java.awt.Frame;

import javax.swing.JColorChooser;

/**
 * Klasa okna dialogowego ustawień. Pozwala na modyfikację kolorów priorytetów, dźwięku do odtwarzania oraz włączenia/ wyłączenia powiadomień.
 * @author krzys
 *
 */
public class SettingsDialog {
/**Referencja do obiektu widoku okna ustawień.*/
	SettingsDialogView view;
	
	//model
	/**Tymczasowa wartość koloru wysokiego priorytetu. Zapisane w notacji HTML*/
	private String highColor;
	/**Tymczasowa wartość koloru normalnego priorytetu. Zapisane w notacji HTML*/
	private String normalColor;
	/**Tymczasowa wartość koloru niskiego priorytetu. Zapisane w notacji HTML*/
	private String lowColor;
	/**Tymczasowa flaga włączonego przypomnienia*/
	private boolean remind;
	/**Tymczasowe ID wybranego dźwięku*/
	private int soundID;
	//model
	
	/**
	 * Tworzy obiekt kontrolera dialogu ustawień. Inicjalizuje także obiekt widoku.
	 */
	SettingsDialog (Frame owner, String title)
	{
		view = new SettingsDialogView(owner,title,this);
		soundID=0;
		remind=false;
	}
	/**
	 * Wywołuje okno dialogowe wyboru koloru oraz konwertuje wybrany kolor na notację HTML.
	 * @param i	Numer priorytetu, którego kolor jest zmieniany.
	 */
	public void colourPick (int i)
	{
		String htmlColor,r,g,b;
		Color newColor = JColorChooser.showDialog(view,"Wybierz kolor",Color.WHITE);
		if(newColor==null) return;
		r=Integer.toHexString(newColor.getRed());
		System.out.println(r.length());
		if(r.length()<2) r="0".concat(r);
		g=Integer.toHexString(newColor.getGreen());
		if(g.length()<2) g="0".concat(g);
		b=Integer.toHexString(newColor.getBlue());
		if(b.length()<2) b="0".concat(b);
		htmlColor="#"+r+g+b;
		if (i==0) {setLowColor(htmlColor);
		view.low.setText("<html><font color="+getLowColor()+">niski</font><html>");};
		if (i==1) {setNormalColor(htmlColor);
		view.normal.setText("<html><font color="+getNormalColor()+">normalny</font><html>");}
		if (i==2)	{setHighColor(htmlColor);
		view.high.setText("<html><font color="+getHighColor()+">wysoki</font><html>");}
		
	}
	/**
	 * Ustawia okno na niewidoczne.
	 */
	public void ok ()
	{
		view.setVisible(false);
	}
	/**
	 * Ustawia stany przycisków okna zgodnie z załadowanymi wartościami oraz wyświetla okno.
	 * @return true po zamknięciu okna.
	 */
	public boolean exec()
	{
		view.remind.setSelected(remind);
		if (soundID==1) view.sound1.setSelected(true);
		if (soundID==2) view.sound2.setSelected(true);
		if (soundID==3) view.sound3.setSelected(true);
		view.low.setText("<html><font color="+getLowColor()+">niski</font><html>");
		view.normal.setText("<html><font color="+getNormalColor()+">normalny</font><html>");
		view.high.setText("<html><font color="+getHighColor()+">wysoki</font><html>");
		view.setVisible(true);
		return true;	
	}
	
	
	//model
	public void setHighColor(String highColor) {
		this.highColor = highColor;
	}
	public String getHighColor() {
		return highColor;
	}
	public void setNormalColor(String normalColor) {
		this.normalColor = normalColor;
	}
	public String getNormalColor() {
		return normalColor;
	}
	public void setLowColor(String lowColor) {
		this.lowColor = lowColor;
	}
	public String getLowColor() {
		return lowColor;
	}
	public void setRemind(boolean remind) {
		this.remind = remind;
	}
	public boolean isRemind() {
		return remind;
	}
	public void setSoundID(int id)
	{
		this.soundID=id;
	}
	public int getSoundID ()
	{
		return this.soundID;
	}
	//model
}
